.dtsi : 通用的設備樹 (類似 header 檔案概念 \ SoC - level)
.dts : 各板子依照不同外設所撰寫的 (board level)
在 ARM Linux,一個 .dts 檔案對應一個 ARM 的 machine,一般放置在核心的 arch/arm64/boot/dts/ 目錄
將 .dts 檔案編譯為 .dtb 的工具
將 .dts 檔案透過 DTC 編譯後的 二進制檔案
Device Tree是一種描述硬體的資料結構,由一系列被命名的結點(node)和屬性(property)組成,而結點本身可包含子結點。所謂屬性,其實就是成對出現的name和value。
**設備樹當中只會有一個根節點 **
一般dtsi檔案用來說明SoC的外圍設備資訊,例如CPU架構,頻率,外圍暫存器地址範圍,如UART,IIC等。通常一個系列裡有多個SoC (stm32mp151 / 153 / 157) 就會把相同的週邊資訊寫到一個.dtsi檔案裡,避免重複寫相同的東西(沒錯就跟我們的c/c++ 概念相同)。
Decives Tree 是使用樹狀結構來描述硬體訊息, 每一個設備都是一個 Node , 每個 Node 當中會有屬性來說明各設備的資訊。
例如 :
/
: 就是根結點 , 一個設備樹檔案(dts or dtsi)當中只會有一個!! 但通常不會只有一個 dts or dtsi 檔案, 所以會有很多個 /
根結點,最後會自動合併成一個根結點。
name@address
name : 節點名字
address:設備的地址或暫存器的開頭地址
EX : uart3@42080000
label:name@address
label: 這個節點的標籤
name : 節點名字
address:設備的地址或暫存器的開頭地址
EX: uart_hihi:uart3@42080000
我們就可以透過 &uart_hihi
來去引用or存取uart3 這個節點。
下一篇會說明設備樹當中常見的屬性,以及它的用途。基本上我們不太會需要去重新的寫設備樹,大多時候我們都是修改而已,所以我覺得我們主要以看得懂,知道邏輯是什麼應該比較重要!